home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.Serializable;
- import java.util.Vector;
- import javax.swing.undo.UndoableEdit;
-
- public class GapContent extends GapVector implements AbstractDocument.Content, Serializable {
- private static final char[] empty = new char[0];
- private transient MarkVector marks;
- private transient MarkData search;
- private transient int unusedMarks;
-
- public GapContent() {
- this(10);
- }
-
- public GapContent(int var1) {
- super(Math.max(var1, 2));
- char[] var2 = new char[]{'\n'};
- ((GapVector)this).replace(0, 0, var2, var2.length);
- this.marks = new MarkVector();
- this.search = new MarkData(this, 0);
- }
-
- // $FF: synthetic method
- static int access$0(GapContent var0) {
- return var0.unusedMarks;
- }
-
- // $FF: synthetic method
- static void access$1(GapContent var0, int var1) {
- var0.unusedMarks = var1;
- }
-
- protected Object allocateArray(int var1) {
- return new char[var1];
- }
-
- final int compare(MarkData var1, MarkData var2) {
- if (var1.index < var2.index) {
- return -1;
- } else {
- return var1.index > var2.index ? 1 : 0;
- }
- }
-
- public Position createPosition(int var1) throws BadLocationException {
- if (this.unusedMarks > Math.max(5, this.marks.size() / 10)) {
- this.removeUnusedMarks();
- }
-
- int var2 = ((GapVector)this).getGapStart();
- int var3 = ((GapVector)this).getGapEnd();
- int var4 = var1 < var2 ? var1 : var1 + (var3 - var2);
- MarkData var5 = new MarkData(this, var4);
- int var6 = this.findSortIndex(var5);
- this.marks.insertElementAt(var5, var6);
- return new StickyPosition(this, var5);
- }
-
- final int findMarkAdjustIndex(int var1) {
- this.search.index = Math.max(var1, 1);
- int var2 = this.findSortIndex(this.search);
-
- for(int var3 = var2 - 1; var3 >= 0; --var3) {
- MarkData var4 = this.marks.elementAt(var3);
- if (var4.index != this.search.index) {
- break;
- }
-
- --var2;
- }
-
- return var2;
- }
-
- final int findSortIndex(MarkData var1) {
- int var2 = 0;
- int var3 = this.marks.size() - 1;
- int var4 = 0;
- if (var3 == -1) {
- return 0;
- } else {
- int var5 = 0;
- MarkData var6 = this.marks.elementAt(var3);
- var5 = this.compare(var1, var6);
- if (var5 > 0) {
- return var3 + 1;
- } else {
- while(var2 <= var3) {
- var4 = var2 + (var3 - var2) / 2;
- MarkData var7 = this.marks.elementAt(var4);
- var5 = this.compare(var1, var7);
- if (var5 == 0) {
- return var4;
- }
-
- if (var5 < 0) {
- var3 = var4 - 1;
- } else {
- var2 = var4 + 1;
- }
- }
-
- return var5 < 0 ? var4 : var4 + 1;
- }
- }
- }
-
- protected int getArrayLength() {
- char[] var1 = (char[])((GapVector)this).getArray();
- return var1.length;
- }
-
- public void getChars(int var1, int var2, Segment var3) throws BadLocationException {
- if (var1 < 0) {
- throw new BadLocationException("Invalid location", -1);
- } else if (var1 + var2 > this.length()) {
- throw new BadLocationException("Invalid location", this.length() + 1);
- } else {
- int var4 = ((GapVector)this).getGapStart();
- int var5 = ((GapVector)this).getGapEnd();
- char[] var6 = (char[])((GapVector)this).getArray();
- if (var1 + var2 <= var4) {
- var3.array = var6;
- var3.offset = var1;
- } else if (var1 >= var4) {
- var3.array = var6;
- var3.offset = var5 + var1 - var4;
- } else {
- var3.array = new char[var2];
- var3.offset = 0;
- int var7 = var4 - var1;
- System.arraycopy(var6, var1, var3.array, 0, var7);
- System.arraycopy(var6, var5, var3.array, var7, var2 - var7);
- }
-
- var3.count = var2;
- }
- }
-
- protected Vector getPositionsInRange(Vector var1, int var2, int var3) {
- int var4 = var2 + var3;
- int var7 = ((GapVector)this).getGapStart();
- int var8 = ((GapVector)this).getGapEnd();
- int var5;
- int var6;
- if (var2 < var7) {
- if (var2 == 0) {
- var5 = 0;
- } else {
- var5 = this.findMarkAdjustIndex(var2);
- }
-
- if (var4 >= var7) {
- var6 = this.findMarkAdjustIndex(var4 + (var8 - var7) + 1);
- } else {
- var6 = this.findMarkAdjustIndex(var4 + 1);
- }
- } else {
- var5 = this.findMarkAdjustIndex(var2 + (var8 - var7));
- var6 = this.findMarkAdjustIndex(var4 + (var8 - var7) + 1);
- }
-
- Vector var9 = var1 == null ? new Vector(Math.max(1, var6 - var5)) : var1;
-
- for(int var10 = var5; var10 < var6; ++var10) {
- var9.addElement(new UndoPosRef(this, this.marks.elementAt(var10)));
- }
-
- return var9;
- }
-
- public String getString(int var1, int var2) throws BadLocationException {
- Segment var3 = new Segment();
- this.getChars(var1, var2, var3);
- return new String(var3.array, var3.offset, var3.count);
- }
-
- public UndoableEdit insertString(int var1, String var2) throws BadLocationException {
- if (var1 >= this.length()) {
- throw new BadLocationException("Invalid insert", this.length());
- } else {
- char[] var3 = var2.toCharArray();
- ((GapVector)this).replace(var1, 0, var3, var3.length);
- return new InsertUndo(this, var1, var2.length());
- }
- }
-
- public int length() {
- int var1 = this.getArrayLength() - (((GapVector)this).getGapEnd() - ((GapVector)this).getGapStart());
- return var1;
- }
-
- private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
- var1.defaultReadObject();
- this.marks = new MarkVector();
- this.search = new MarkData(this, 0);
- }
-
- public UndoableEdit remove(int var1, int var2) throws BadLocationException {
- if (var1 + var2 >= this.length()) {
- throw new BadLocationException("Invalid remove", this.length() + 1);
- } else {
- String var3 = this.getString(var1, var2);
- RemoveUndo var4 = new RemoveUndo(this, var1, var3);
- ((GapVector)this).replace(var1, var2, empty, 0);
- return var4;
- }
- }
-
- final void removeUnusedMarks() {
- int var1 = this.marks.size();
- MarkVector var2 = new MarkVector(var1);
-
- for(int var3 = 0; var3 < var1; ++var3) {
- MarkData var4 = this.marks.elementAt(var3);
- if (!var4.unused) {
- var2.addElement(var4);
- }
- }
-
- this.marks = var2;
- this.unusedMarks = 0;
- }
-
- protected void resetMarksAtZero() {
- if (this.marks != null && ((GapVector)this).getGapStart() == 0) {
- int var1 = ((GapVector)this).getGapEnd();
- int var2 = 0;
-
- for(int var3 = this.marks.size(); var2 < var3; ++var2) {
- MarkData var4 = this.marks.elementAt(var2);
- if (var4.index > var1) {
- break;
- }
-
- var4.index = 0;
- }
- }
-
- }
-
- protected void shiftEnd(int var1) {
- int var2 = ((GapVector)this).getGapEnd();
- super.shiftEnd(var1);
- int var3 = ((GapVector)this).getGapEnd() - var2;
- int var4 = this.findMarkAdjustIndex(var2);
- int var5 = this.marks.size();
-
- for(int var6 = var4; var6 < var5; ++var6) {
- MarkData var7 = this.marks.elementAt(var6);
- var7.index += var3;
- }
-
- }
-
- protected void shiftGap(int var1) {
- int var2 = ((GapVector)this).getGapStart();
- int var3 = var1 - var2;
- int var4 = ((GapVector)this).getGapEnd();
- int var5 = var4 + var3;
- int var6 = var4 - var2;
- super.shiftGap(var1);
- if (var3 > 0) {
- int var7 = this.findMarkAdjustIndex(var2);
- int var8 = this.marks.size();
-
- for(int var9 = var7; var9 < var8; ++var9) {
- MarkData var10 = this.marks.elementAt(var9);
- if (var10.index >= var5) {
- break;
- }
-
- var10.index -= var6;
- }
- } else if (var3 < 0) {
- int var11 = this.findMarkAdjustIndex(var1);
- int var12 = this.marks.size();
-
- for(int var13 = var11; var13 < var12; ++var13) {
- MarkData var14 = this.marks.elementAt(var13);
- if (var14.index >= var4) {
- break;
- }
-
- var14.index += var6;
- }
- }
-
- this.resetMarksAtZero();
- }
-
- protected void shiftGapEndUp(int var1) {
- int var2 = this.findMarkAdjustIndex(((GapVector)this).getGapEnd());
- int var3 = this.marks.size();
-
- for(int var4 = var2; var4 < var3; ++var4) {
- MarkData var5 = this.marks.elementAt(var4);
- if (var5.index >= var1) {
- break;
- }
-
- var5.index = var1;
- }
-
- super.shiftGapEndUp(var1);
- this.resetMarksAtZero();
- }
-
- protected void shiftGapStartDown(int var1) {
- int var2 = this.findMarkAdjustIndex(var1);
- int var3 = this.marks.size();
- int var4 = ((GapVector)this).getGapStart();
- int var5 = ((GapVector)this).getGapEnd();
-
- for(int var6 = var2; var6 < var3; ++var6) {
- MarkData var7 = this.marks.elementAt(var6);
- if (var7.index > var4) {
- break;
- }
-
- var7.index = var5;
- }
-
- super.shiftGapStartDown(var1);
- this.resetMarksAtZero();
- }
-
- protected void updateUndoPositions(Vector var1, int var2, int var3) {
- int var4 = var2 + var3;
- int var5 = ((GapVector)this).getGapEnd();
- int var7 = this.findMarkAdjustIndex(var5 + 1);
- int var6;
- if (var2 != 0) {
- var6 = this.findMarkAdjustIndex(var5);
- } else {
- var6 = 0;
- }
-
- for(int var8 = var1.size() - 1; var8 >= 0; --var8) {
- UndoPosRef var9 = (UndoPosRef)var1.elementAt(var8);
- var9.resetLocation(var4, var5);
- }
-
- if (var6 < var7) {
- Object[] var13 = new Object[var7 - var6];
- int var10 = 0;
- if (var2 == 0) {
- for(int var15 = var6; var15 < var7; ++var15) {
- MarkData var18 = this.marks.elementAt(var15);
- if (var18.index == 0) {
- var13[var10++] = var18;
- }
- }
-
- for(int var16 = var6; var16 < var7; ++var16) {
- MarkData var19 = this.marks.elementAt(var16);
- if (var19.index != 0) {
- var13[var10++] = var19;
- }
- }
- } else {
- for(int var11 = var6; var11 < var7; ++var11) {
- MarkData var12 = this.marks.elementAt(var11);
- if (var12.index != var5) {
- var13[var10++] = var12;
- }
- }
-
- for(int var14 = var6; var14 < var7; ++var14) {
- MarkData var17 = this.marks.elementAt(var14);
- if (var17.index == var5) {
- var13[var10++] = var17;
- }
- }
- }
-
- this.marks.replaceRange(var6, var7, var13);
- }
-
- }
- }
-